데이터 유형
데이터베이스에서 사용하는 데이터 유형은 다양한 형태로 제공된다. 벤더별로 SQL 문장의 차이는 적어지고 있지만, 데이터 유형과 내장 함수 부분에서는 차이가 많은 편이다.
CHARACTER(s)
- 고정길이 문자열
- s만큼의 길이를 갖고 할당된 변수값의 길이가 s보다 작은 경우 그 차이 만큼을 공백으로 채운다.
Oracle
1 Byte <= s <= 2,000 Byte
SQL Server
1 Byte <= s <= 8,000 Byte
VARCHAR(s)
- 가변길이 문자열(Oracle의 경우 VARCHAR2로 표현)
- s만큼의 길이를 가질 수 있으나 가변길이로 조정되므로 할당된 변수값의 Byte크기를 갖는다.
Oracle
1 Byte <= s <= 4,000 Byte
SQL Server
1 Byte <= s <= 8,000 Byte
NUMERIC
- 정수, 실수 등 숫자정보
Oracle
NUMBER e.g. NUMBER(9, 3)
SQL Server
NUMERIC, DECIMAL, DEC, SMALLINT, INTEGER, INT, BIGINT, FLOAT, REAL, DOUBLE PRECISION
DATE
- 날짜와 시간 정보
- 데이터베이스는 날짜 저장시 Century, Year, Month, Day, Hours, Minutes, Seconds와 같은 숫자 형식으로 변환하여 저장하므로 산술 연산이 가능하다.
Oracle
1s 단위 관리
SQL Server
3.33ms 단위 관리
SELECT SYSDATE - 1 FROM DAUL; SELECT SYSDATE - 1/24 FROM DAUL; SELECT SYSDATE - 1/(24*60) FROM DUAL; SELECT SYSDATE - 1/24/60 FROM DUAL; SELECT SYSDATE - 1/(24*60*60) FROM DUAL; SELECT SYSDATE - 1/24/60/60 FROM DUAL;
|
연산자
WHERE 절에 사용되는 연산자는 다음과 같다.
연산자 종류
|
|
산술연산자 |
+, -, *, / |
비교연산자 |
=, >, >=, <, <= |
SQL연산자 |
BETWEEN, IN, LIKE, IS NULL |
부정비교연산자 |
!=, ^=, <>, NOT |
부정SQL연산자 |
NOT BETWEEN, NOT IN, IS NOT NULL |
연산자 우선순위
- 괄호로 묶은 연산이 제일 먼저 처리된다.
- 연산자들 중 NOT연산자가 먼저 처리되고,
- 비교연산자(=, >, >=, <, <=), SQL비교연산자(BETWEEN, IN, LIKE, IS NULL)가 처리되고,
- 논리연산자 중에서는 AND, OR의 순으로 처리된다.
문자 비교방법
비교연산자의 양쪽 모두 CHAR 타입인 경우
- 길이가 서로 다르면 짧은 쪽에 공백을 추가하여 길이를 같게 한 후 비교한다.
- 서로 다른 문자가 나올때까지 비교한다.
- 양쪽이 서로 다른 첫 번째 문자의 값에 따라 크기를 결정한다.
- 공백의 수만 다르다면 서로 같은 값으로 결정한다.
비교연산자의 어느 한 쪽이 VARCHAR 타입인 경우
- 서로 다른 문자가 나올 때까지 비교한다.
- 길이가 다르면 짧은 쪽이 끝날때까지만 비교한 후, 길이가 긴 것이 크다고 판단한다.
- 길이가 같고 다른 것이 없다면 같다고 판단한다.
상수값과 비교
- 상수쪽을 변수타입과 동일하게 바꾸고 비교한다.
- 변수쪽이 CHAR 타입이면 위의 CHAR 타입의 경우를 적용한다.
- 변수쪽이 VARCHAR 타입이면 위의 VARCHAR 타입의 경우를 적용한다.
SELECT * FROM TEAM WHERE HEIGHT >= '170'
|
내장 함수(Built-In Function)
내장 함수는 벤더별로 가장 큰 차이를 보이는 부분이지만, 핵심적인 기능들은 이름이나 표현법이 다르더라도 대부분의 데이터베이스가 공통적으로 제공하고 있다. 내장 함수는 다음과 같이 나눌 수 있다.
내장 함수의 분류
- 단일행 함수(Single-row Function): 문자형, 숫자형, 날짜형, 변환형, NULL 관련 함수
- 다중행 함수(Multi-row Function)
- 집계 함수(Aggregate Function)
- 그룹 함수(Group Function)
- 윈도우 함수(Window Function)
문자형 함수
함수 |
설명 |
LOWER(s) |
문자열 s를 소문자로 변환한다. |
UPPER(s) |
문자열 s를 대문자로 변환한다. |
ASCII(s) |
문자열 s의 ASCII 코드값을 반환한다. |
CHR(ASCII) |
ASCII 코드값을 문자/숫자로 변환한다. |
CONCAT(s1, s2) |
문자열 s1, 문자열 s2의 연결값을 반환한다. |
SUBSTR(s, m, n) |
문자열 s의 m위치에서 n개의 문자길이를 반환한다. |
LENGTH(s) |
문자열 s의 길이를 반환한다. |
LTRIM(s [, n]) |
문자열 s의 첫 문자부터 확인해서 n이 나타나면 해당 문자를 제거한다. SQL Server의 경우 LTRIM()은 공백만 제거할 수 있다. |
RTRIM(s [, n]) |
문자열 s의 마지막 문자부터 확인해서 n이 나타나면 해당 문자를 제거한다. SQL Server의 경우 RTRIM()은 공백만 제거할 수 있다. |
TRIM(s) |
LTRIM()과 RTRIM()을 결합한 형태이다. |
숫자형 함수
함수 |
설명 |
ABS(n) |
n의 절대값을 반환한다. |
MOD(n, m) |
n을 m으로 나눈 나머지 값을 반환한다. |
ROUND(n, m) |
n을 소수점 m+1자리에서 반올림한다. |
TRUNC(n, m) |
n을 소수점 m+1자리에서 절사한다. |
SIGN(n) |
n값이 양수, 음수, 0인지를 구분한다. |
CEIL(n) |
n보다 크거나 같은 최소 정수를 반환한다. e.g. CEIL(38.123) = 39 |
FLOOR(n) |
n보다 작거나 같은 최대 정수를 반환한다. e.g. FLOOR(-38.123) = -39 |
EXP(n) |
n의 지수값을 반환한다. |
POWER(n) |
n의 거듭제곱값을 반환한다. |
SQRT(n) |
n의 제곱근값을 반환한다. |
LOG(n) |
n의 로그 값을 반환한다. |
LN(n) |
n의 자연로그 값을 반환한다. |
날짜형 함수
- 데이터베이스는 날짜를 숫자로 저장하기 때문에 덧셈, 뺄셈 같은 산술연산도 가능하다.
함수 |
설명 |
SYSDATE |
현재 날짜와 시각을 출력한다. |
EXTRACT( ) |
날짜(DATE) 정보에서 년/월/일을 출력한다. (시/분/초도 가능) |
TO_NUMBER(TO_CHAR(d, ‘YYYYMMDD’) |
날짜(DATE) 정보에서 년/월/일을 출력한다. |
SELECT ENAME, HIREDATE, EXTRACT(YEAR FROM HIREDATE), EXTRACT(MONTH FROM HIREDATE), EXTRACT(DAY FROM HIREDATE), TO_NUMBER(TO_CHAR(HIREDATE, 'YYYY')), TO_NUMBER(TO_CHAR(HIREDATE, 'MM')), TO_NUMBER(TO_CHAR(HIREDATE, 'DD')) FROM EMP;
|
변환형 함수
- 명시적(Explict) 변환: 함수로 데이터 유형을 변환하도록 명시해주는 경우이다.
- 암시적(Implict) 변환: 데이터베이스가 자동으로 데이터 유형을 변환하여 계산하는 경우로, 성능 저하가 발생할 수 있다.
함수 |
설명 |
TO_NUMBER(s) |
문자열 s를 숫자로 변환한다. |
TO_CHAR(num│date [,FORMAT]) |
숫자/날짜를 주어진 포맷의 문자열 형태로 변환한다. |
TO_DATE(s [,FORMAT]) |
문자열 s를 주어진 포맷의 날짜 형태로 변환한다. |
NULL 관련 함수
- NULL 값은 0 또는 공백과는 다르다.
- NULL 값이 포함된 연산은 그 결과값도 NULL이다.
함수 |
설명 |
NVL(e1, e2) |
표현식 e1의 결과값이 NULL이면 e2의 값을 출력한다. |
NULLIF(e1, e2) |
표현식 e1이 표현식 e2와 같으면 NULL, 같지 않으면 e1을 반환한다. |
COALESCE(e1, e2, …) |
e1, e2, …에서 NULL이 아닌 최초의 표현식을 반환한다. 모두 NULL이면 NULL을 반환한다. |
집계함수
함수 |
설명 |
COUNT(*) |
NULL 값을 포함한 행의 수를 출력한다. |
COUNT(col), COUNT(*) |
col의 값 중 NULL은 제외한 행의 수를 출력한다. |
SUM([DISTINCT│ALL] col) |
col의 NULL 값을 제외한 합계를 구한다. |
AVG([DISTINCT│ALL] col) |
col의 NULL 값을 제외한 평균을 구한다. |
MAX([DISTINCT│ALL] col) |
col의 최대값을 구한다. |
MIN([DISTINCT│ALL] col) |
col의 최소값을 구한다. |
STDDEV([DISTINCT│ALL] col) |
col의 표준편차를 구한다. |
VARIAN([DISTINCT│ALL] col) |
col의 분산을 구한다. |